import { onMounted, onUnmounted } from 'vue';
import { EventManager, EVENT_NAMES } from '@/utils/eventManager';

/**
 * 医院事件监听组合式函数
 * 专门用于监听医院相关的事件变化
 */
export function useHospitalEvent() {
    // 医院变化事件处理函数
    const handleHospitalChange = (data: any) => {
        // 可以在这里添加通用的医院变化处理逻辑
    };

    // 系统机构变化事件处理函数
    const handleSysOrgChange = (data: any) => {
        // 可以在这里添加通用的系统机构变化处理逻辑
    };

    // 组件挂载时添加事件监听
    onMounted(() => {
        EventManager.on(EVENT_NAMES.HOSPITAL_CHANGE, handleHospitalChange);
        EventManager.on(EVENT_NAMES.SYS_ORG_CHANGE, handleSysOrgChange);
    });

    // 组件卸载时移除事件监听
    onUnmounted(() => {
        EventManager.off(EVENT_NAMES.HOSPITAL_CHANGE, handleHospitalChange);
        EventManager.off(EVENT_NAMES.SYS_ORG_CHANGE, handleSysOrgChange);
    });

    return {
        handleHospitalChange,
        handleSysOrgChange
    };
}

/**
 * 自定义医院事件监听组合式函数
 * @param hospitalChangeCallback 医院变化回调函数
 * @param sysOrgChangeCallback 系统机构变化回调函数
 */
export function useCustomHospitalEvent(
    hospitalChangeCallback?: (data: any) => void,
    sysOrgChangeCallback?: (data: any) => void
) {
    // 医院变化事件处理函数
    const handleHospitalChange = (data: any) => {
        if (hospitalChangeCallback) {
            hospitalChangeCallback(data);
        }
    };

    // 系统机构变化事件处理函数
    const handleSysOrgChange = (data: any) => {
        if (sysOrgChangeCallback) {
            sysOrgChangeCallback(data);
        }
    };

    // 组件挂载时添加事件监听
    onMounted(() => {
        EventManager.on(EVENT_NAMES.HOSPITAL_CHANGE, handleHospitalChange);
        EventManager.on(EVENT_NAMES.SYS_ORG_CHANGE, handleSysOrgChange);
    });

    // 组件卸载时移除事件监听
    onUnmounted(() => {
        EventManager.off(EVENT_NAMES.HOSPITAL_CHANGE, handleHospitalChange);
        EventManager.off(EVENT_NAMES.SYS_ORG_CHANGE, handleSysOrgChange);
    });

    return {
        handleHospitalChange,
        handleSysOrgChange
    };
}

/**
 * 使用示例：
 * 
 * // 方式1：使用默认的医院事件监听
 * import { useHospitalEvent } from '@/composables/useHospitalEvent';
 * 
 * const { handleHospitalChange, handleSysOrgChange } = useHospitalEvent();
 * 
 * // 方式2：使用自定义回调的医院事件监听
 * import { useCustomHospitalEvent } from '@/composables/useHospitalEvent';
 * 
 * const handleHospitalChange = (data: any) => {
 *     // 重新加载数据
 *     loadData();
 * };
 * 
 * const handleSysOrgChange = (data: any) => {
 *     // 更新UI
 *     updateUI();
 * };
 * 
 * useCustomHospitalEvent(handleHospitalChange, handleSysOrgChange);
 * 
 * // 方式3：直接在组件中使用 EventManager
 * import { EventManager, EVENT_NAMES } from '@/utils/eventManager';
 * 
 * onMounted(() => {
 *     EventManager.on(EVENT_NAMES.HOSPITAL_CHANGE, (data) => {
 *         // 处理逻辑
 *     });
 * });
 * 
 * onUnmounted(() => {
 *     EventManager.off(EVENT_NAMES.HOSPITAL_CHANGE, callback);
 * });
 */
